package com.t.bricks.bussiness.service.vacation.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.t.bricks.bussiness.db.dao.vacation.VacationDao;
import com.t.bricks.bussiness.db.entity.vacation.Vacation;
import com.t.bricks.bussiness.db.entity.vacation.base.VacationBase;
import com.t.bricks.bussiness.service.vacation.VacationService;
import com.t.bricks.model.MsgEmity;
import com.t.bricks.utils.spring.ModuleUtil;

/**
 * 请假管理'Vacation表'基本业务操作类接口实现
 */
@Service
public class VacationServiceImpl implements VacationService<Vacation> {

	@Autowired
	private VacationDao<Vacation> vacationDao;

	/**
	 * 新增
	 * @param vacation 请假管理 对象实体,注意:跨包访问时可能会是json字符串
	 * @return MsgEmity
	 */
	@Override
	public MsgEmity add(Object vacation) {
		MsgEmity me = ModuleUtil.objToEntity(vacation, Vacation.class);//转换数据,因为如果传递的是String,则可能是进行了跨包访问,要先用Json转换成实体对象
		if (!me.isSuccess()) {
			return me;
		}
		
		Vacation vacationData = me.getData();
		
		//--添加时不允许提交--//
		vacationData.setsOpinion(null);
		vacationData.setdExamineDate(null);
		vacationData.setiState(1);
		
		me = ModuleUtil.validDbEntityByAdd(vacationData);// 通用的基本数据验证,如果要进行比较复杂的数据验证则可以屏蔽掉此方法自行编写
		if (!me.isSuccess()) {
			return me;
		}
		
		me = ModuleUtil.validDbEntityRepeatByAdd((VacationBase)vacationData, vacationDao);//查询数据库,验证数据是否有重复,因验证数据重复的方式比较复杂,直接在sql脚本中处理
		if (!me.isSuccess()) {// 在false下,如果返回8028则表示数据库查询异常,否则返回后4位是8026的数据,如xxx8026,从万位起表示从数据库中查询的结果
			String tmp = me.getData().toString();
			tmp = tmp.substring(tmp.length() -4, tmp.length());// 数据一定不小于4位
			return me.setData(tmp);// 发现重复数据后不进行其它业务处理则退出时,必须清理返回数据
		}
		
		vacationData.setsId(null);//清空记录编号
		
		me = ModuleUtil.supplyDbEntityAttrByAdd(vacationData);// 补充数据,如添加id、当前用户、当前时间等
		if (!me.isSuccess()) {
			return me;
		}
		
		return vacationDao.add(vacationData);
	}
	
	/**
	 * 修改状态
	 * @param vacation
	 * @return MsgEmity 返回执行情况
	 */
	@Override
	public MsgEmity changeState(Vacation vacation) {
		if (null == vacation) {
			return new MsgEmity(false, "信息对象不能为空！", 8000);
		}
		
		if (null == vacation.getsId() || "".equals(vacation.getsId().trim())) {
			return new MsgEmity(false, "编号不能为空！", 8001);
		}
		
		if (null == vacation.getiState()) {
			return new MsgEmity(false, "状态值不能为空！", 8002);
		}
		
		if (null == vacation.getiVersion() || vacation.getiVersion().intValue() < 1) {
			return new MsgEmity(false, "版本号不该小于1！", 8003);
		}
		
		if (1 == vacation.getiState().intValue()) {
			return new MsgEmity(false, "状态值不能改回'提交'状态！", 8004);
		}
		
		return vacationDao.changeState(vacation);
	}

}
